/*
@Time : 2019-11-7 上午 10:13
@Author : Gerald
@File : ChatRoomClient.go
@Software: GoLand
*/
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"strings"
)

func checkError(err error, choose string) {
	if err != nil && choose == "exit" {
		panic(err)
	} else if err != nil && choose == "continue" {
		fmt.Println("Bad accept, continue...")
	}
}

func messageSend(conn net.Conn) {
	inputReader := bufio.NewReader(os.Stdin)

	for true {
		fmt.Printf("请输入需要发送的话: ")
		messageBuf, readErr := inputReader.ReadString('\n') // 参数的意思是遇到 '\n' 就停止

		// 先将接收进来的字符串的最后一个 换行符 去掉
		messageBuf = messageBuf[:4]

		// 检查是否用户要退出
		if strings.ToUpper(messageBuf) == "EXIT" {
			fmt.Println("See ya~")
			os.Exit(1)
		}
		checkError(readErr, "continue")

		_, writeErr := conn.Write([]byte(messageBuf))
		checkError(writeErr, "continue")
	}
}

func main() {
	// 连接服务器
	conn, dialErr := net.Dial("tcp", "127.0.0.1:8080")
	checkError(dialErr, "exit")
	defer conn.Close()

	// 另起一个协程来完成发送消息的操作
	go messageSend(conn)

	// 循环等待服务器发来的消息
	for true {
		recvBuf := make([]byte, 1024)
		recvNum, readErr := conn.Read(recvBuf)
		checkError(readErr, "exit")

		fmt.Printf("\n")
		fmt.Println("Receive server message content : ", string(recvBuf[:recvNum]))
	}
}
